A non-volatile dual-inline memory module (NVDIMM), also known as “persistent memory” or “non-volatile memory,” is an emerging type of computer memory that offers fast, byte-level access to data in a manner similar to volatile random access memory (e.g., DRAM), but retains its contents when system power is turned off or lost. NVDIMMs can be broadly classified into two types: NVDIMM-P and NVDIMM-N. NVDIMM-P makes use of a new class of physical memory, marketed under various names such as 3D XPoint, Crystal Ridge, etc., that can natively persist the data stored in its memory cells. On the other hand, NVDIMM-N makes use of traditional DRAM and an on-board or on-chip battery. When system power is turned off or lost, the battery powers the NVDIMM-N module for a short period of time, which enables the DRAM contents to be persisted to non-volatile storage (e.g., flash memory) during that period.
Certain variants of NVDIMM, such as NVDIMM-P modules developed and sold by Intel Corporation, support a feature known as write pending queue (WPQ) flushing. With this feature, an application that writes data to the NVDIMM(s) of a system can trigger an explicit flush of any pending write data in the queues/buffers of the memory controller(s) connected to the NVDIMM(s), thereby ensuring that such pending data is persisted (in case the system subsequently crashes or loses power). This generally involves issuing a WPQ flush command, which causes the system operating system (OS) to perform a write to a predefined flush hint address (FHA) specified in a system ACPI (Advanced Configuration and Power Interface) table, referred to as the flush hint address table (FHAT). The write to the FHA causes a flush to occur with respect to the queues/buffers of the memory controller associated with the FHA.
Other variants of NVDIMM, such as NVDIMM-N modules developed and sold by Hewlett-Packard, Inc., do not support or allow WPQ flushing. This is because these other NVDIMM variants are typically battery-backed and thus, when a system power failure or power loss event occurs, any pending write data in system caches, memory controller queues/buffers, and so on are automatically flushed by the system BIOS to non-volatile storage while the NVDIMM module(s) and other key system components run on battery power. Accordingly, there is no need to provide applications an explicit WPQ flush command in this case, since the NVDIMM platform is designed to perform this flushing autonomously.